// 封装http请求

import axios from 'axios'
import store from '../store/index'
import { getToken } from './auth'
import { Message } from 'element-ui'

const service = axios.create({
    baseURL: process.env.ROOT,
    timeout: 5000,
    withCredentials: true,
    crossDomain: true
})

//拦截请求之前 
service.interceptors.request.use(
    config => {
        // config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
        // if (config.method == 'post') {
        //     config.data = qs.stringify({
        //         ...config.data
        //     })
        // }
        if (store.getters.token) {
            config.headers['Authorization'] = getToken()
        }
        return config;
    },
    error => {
        Promise.reject(error);
    }
)

//拦截数据获取之后
service.interceptors.response.use(
    response => {
        let code = response.data.code;
        // console.log(router);
        //检查状态  
        // 000000 正常 , 非法token , token过期 . 其他客户端登录 
        //异常token都退出登录
        if (code !== '000000') {
            //提示登录错误
            Message({
                message: response.data.msg = '' ? '请求服务器失败' : response.data.msg,
                type: 'error',
                duration: 3000
            });
            if (code == '400002' || code == '400003' || code == '400004') {//判断token异常 强制退出登录
                Message({
                    message: '验证Token错误,请重新登录',
                    type: 'error',
                    duration: 3000
                })
                store.dispatch('loginOut').then(() => {
                    //强制刷新页面
                    location.reload();
                });
            } else if (code == '400005') {
                //没有权限直接跳转401
                Message({
                    message: response.data.msg,
                    type: 'error',
                    duration: 2000
                })
            }
            //返回promise
            return Promise.reject('Error:' + 'Login Error!')
        } else {
            return response.data;
        }
    },
    error => {
        Message({
            message: error,
            type: 'error',
            duration: 3000
        })
        return Promise.reject(error);
    }
)
export default service;

// 错误码:
// SUCCESS("000000", "成功"),
// SYSTEM_ERROR("500000", "系统异常"),
// TIMEOUT("400001", "访问超时"),
// NO_ACCESS("400003", "访问受限"),
// LOGIN_ERROR("400005", "登录失败"),
// PARAM_ILLEGAL("100000", "参数校验不通过");
// 无权限码
// NO_TOKEN("400002","未传参数Authorization"),
// PARSE_TOKEN_ERROR("400003","解析参数Authorization错误"),
// TOKEN_TIMEOUT("400004","参数Authorization过期"),


//拦截规则:
/* 

访问数据时:
[非法的token; 其他客户端登录了;Token 过期了] 统统拦截强制退出登录



 */

//使用方法
// request({
//     url:'/api/test',
//     method:'POST',  //POST  or  GET,
//     parmams: 'data'  //参数
// }).then(res=>{
//     console.log(res.data);
// })